home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Internet Surfer: Getting Started
/
Internet Surfer - Getting Started (Wayzata Technology)(7231)(1995).bin
/
pc
/
mac
/
bonus
/
peter_le
/
finger-1
/
my_units
/
myutils.uni
< prev
next >
Wrap
Text File
|
1992-02-24
|
10KB
|
456 lines
unit MyUtils;
{ This code is part of the Finger/Fingerd source code, written in THINK Pascal 4 }
{ Copyright 1991-1992 Peter N Lewis }
{ If you use this code, you must give me credit in your about box and documentation }
{ This is part of my generic library of routines }
interface
type
versionRecord = packed record
version: integer;
devcode: byte;
revision: byte;
country: integer;
short: str15;
long: str255;
end;
function TrapAvailable (tNumber: INTEGER): BOOLEAN;
function MyNumToString (n: longInt): str255;
function NumToStr (n: longInt): str255;
function StrToNum (s: str255): longInt;
function GetIndexedString (strh, i: integer): str255;
procedure DotDotDot (var s: str255; var width: integer);
procedure SetItemEnable (mh: menuHandle; item: integer; enable: boolean);
procedure SetIDItemEnable (menu, item: integer; enable: boolean);
function GetIDItemEnable (menu, item: integer): boolean;
function GetItemEnable (mh: menuHandle; item: integer): boolean;
procedure DotItem (mh: menuHandle; item: integer; dotted: boolean);
function MyFrontWindow: boolean;
function DAFrontWindow: boolean;
function GetIndStrSize (size, id, index: integer): str255;
procedure GetVersion (var vers: versionRecord);
procedure SetVersionParamText (c2, c3: str255);
function GetDirID (wdrn: integer; var vrn: integer; var dirID: longInt): OSErr;
procedure SetItemText (dlg: dialogPtr; item: integer; text: str255);
procedure GetItemText (dlg: dialogPtr; item: integer; var text: str255);
procedure HiliteItem (dlg: dialogPtr; item: integer; on: boolean);
function ControlEnabled (dlg: dialogPtr; item: integer): boolean;
function GetVolInfo (var name: str63; var vrn: integer; index: integer; var CrDate: longInt): OSErr;
procedure OutlineDefault1 (dp: dialogPtr; item: integer);
procedure SetUpDefaultOutline (dp: dialogPtr; def_item, user_item: integer);
procedure FlashItem (dlg: dialogPtr; item: integer);
procedure PlotSICN (id: integer; index, v, h: integer);
procedure SegmentInit;
procedure SegmentUtil;
procedure SegmentUtil2;
procedure SegmentTerm;
function HLockState (h: univ handle): signedByte;
{ procedure SPrintS5V (var dst: str255;var src,s1, s2, s3, s4, s5: str255);}
procedure SPrintS5 (var dst: str255; src, s1, s2, s3, s4, s5: str255);
implementation
uses
MyTypes, Traps;
{$S Init}
procedure SegmentInit;
begin
end;
{$S Util}
procedure SegmentUtil;
begin
end;
{$S Util2}
procedure SegmentUtil2;
begin
end;
{$S Term}
procedure SegmentTerm;
begin
end;
{$S Util}
function TrapAvailable (tNumber: INTEGER): BOOLEAN;
{Check to see if a given trap is implemented. Babble as taken from IM6 }
const
TrapMask = $0800;
var
tType: TrapType;
ignoreError: OSErr;
begin
if BAND(tNumber, TrapMask) > 0 then
tType := ToolTrap
else
tType := OSTrap;
if tType = ToolTrap then begin
tNumber := BAND(tNumber, $7FF);
if tNumber >= $400 then
tNumber := _Unimplemented
else if tNumber >= $200 then
if NGetTrapAddress($A86E, ToolTrap) <> NGetTrapAddress($AA6E, ToolTrap) then
tNumber := _Unimplemented;
end;
TrapAvailable := NGetTrapAddress(tNumber, tType) <> GetTrapAddress(_Unimplemented);
end; {TrapAvailable}
{$S Util}
function MyNumToString (n: longInt): str255;
var
s: str255;
begin
if abs(n) < 4096 then
NumToString(n, s)
else if abs(n) < 4194304 then begin
NumToString(n div 1024, s);
s := Concat(s, 'k');
end
else begin
NumToString(n div 1048576, s);
s := Concat(s, 'M');
end;
MyNumToString := s;
end;
{$S Util}
function NumToStr (n: longInt): str255;
var
s: str255;
begin
NumToString(n, s);
NumToStr := s;
end;
{$S Util}
function StrToNum (s: str255): longInt;
var
n: longInt;
begin
StringToNum(s, n);
StrToNum := n;
end;
{$S Util}
function GetIndexedString (strh, i: integer): str255;
var
s: str255;
begin
GetIndString(s, strh, i);
GetIndexedString := s;
end;
{$S Util2}
procedure DotDotDot (var s: str255; var width: integer);
var
maxwidth, len: integer;
begin
maxwidth := width;
width := StringWidth(s);
if width > maxwidth then begin
width := width + CharWidth('╔');
{$PUSH}
{$R-}
len := ord(s[0]);
while (len > 0) and (width > maxwidth) do begin
width := width - CharWidth(s[len]);
len := len - 1;
end;
len := len + 1;
s[0] := chr(len);
s[len] := '╔';
{$POP}
end;
end;
{$S}
procedure SetItemEnable (mh: menuHandle; item: integer; enable: boolean);
begin
if enable then
EnableItem(mh, item)
else
DisableItem(mh, item);
end;
{$S}
procedure SetIDItemEnable (menu, item: integer; enable: boolean);
begin
SetItemEnable(GetMHandle(menu), item, enable);
end;
{$S}
function GetItemEnable (mh: menuHandle; item: integer): boolean;
begin
if item > 31 then
GetItemEnable := true
else
GetItemEnable := BTST(mh^^.enableFlags, item);
end;
{$S}
function GetIDItemEnable (menu, item: integer): boolean;
begin
GetIDItemEnable := GetItemEnable(GetMHandle(menu), item);
end;
{$S Util2}
procedure DotItem (mh: menuHandle; item: integer; dotted: boolean);
begin
if dotted then
SetItemMark(mh, item, 'Ñ')
else
SetItemMark(mh, item, chr(0));
end;
{$S Util2}
function MyFrontWindow: boolean;
var
wp: windowPtr;
begin
wp := FrontWindow;
if wp = nil then
MyFrontWindow := false
else
MyFrontWindow := windowPeek(wp)^.windowKind >= userKind;
end;
{$S Util2}
function DAFrontWindow: boolean;
var
wp: windowPtr;
begin
wp := FrontWindow;
if wp = nil then
DAFrontWindow := false
else
DAFrontWindow := windowPeek(wp)^.windowKind < 0;
end;
{$S Util2}
function GetIndStrSize (size, id, index: integer): str255;
var
s255: str255;
begin
GetIndString(s255, id, index);
GetIndStrSize := copy(s255, 1, size - 1);
end;
{$S Util}
procedure GetVersion (var vers: versionRecord);
var
vh: handle;
begin
with vers do begin
vh := GetResource('vers', 1);
if vh = nil then begin
version := $0000;
devcode := $20;
revision := $00;
country := 0;
short := '0.0.0';
long := 'Unknown v0.0.0';
end
else begin
BlockMove(vh^, @vers, sizeof(vers));
{$PUSH}
{$R-}
BlockMove(Ptr(longint(vh^) + (longint(@short) - longint(@vers)) + ord(short[0]) + 1), @long, sizeof(long));
if ord(short[0]) >= sizeof(short) then
short[0] := chr(sizeof(short) - 1);
{$POP}
ReleaseResource(vh);
end;
end;
end;
{$S Util}
procedure SetVersionParamText (c2, c3: str255);
var
vers: versionRecord;
begin
GetVersion(vers);
ParamText(vers.short, vers.long, c2, c3);
end;
{$S Util}
function GetDirID (wdrn: integer; var vrn: integer; var dirID: longInt): OSErr;
var
procID: longInt;
oe: OSErr;
begin
oe := GetWDInfo(wdrn, vrn, dirID, procID);
if oe <> noErr then begin
vrn := wdrn;
dirID := 0;
end;
GetDirID := oe;
end;
{$S Util}
procedure SetItemText (dlg: dialogPtr; item: integer; text: str255);
var
it: integer;
ih: handle;
box: rect;
oldtext: str255;
begin
GetDItem(dlg, item, it, ih, box);
GetIText(ih, oldtext);
if oldtext <> text then
SetIText(ih, text);
end;
{$S Util}
procedure GetItemText (dlg: dialogPtr; item: integer; var text: str255);
var
it: integer;
ih: handle;
box: rect;
oldtext: str255;
begin
GetDItem(dlg, item, it, ih, box);
GetIText(ih, text);
end;
{$S Util}
procedure HiliteItem (dlg: dialogPtr; item: integer; on: boolean);
var
k: integer;
h: handle;
r: rect;
begin
GetDItem(dlg, item, k, h, r);
HiliteControl(controlHandle(h), 255 * ord(not on));
end;
{$S Util}
function ControlEnabled (dlg: dialogPtr; item: integer): boolean;
var
k: integer;
h: handle;
r: rect;
begin
GetDItem(dlg, item, k, h, r);
ControlEnabled := controlHandle(h)^^.contrlHilite <> 255;
end;
{$S Util2}
function GetVolInfo (var name: str63; var vrn: integer; index: integer; var CrDate: longInt): OSErr;
var
pb: paramBlockRec;
oe: OSErr;
begin
with pb do begin
if (name <> '') & (name[length(name)] <> ':') then
name := concat(name, ':');
pb.ioNamePtr := @name;
ioVRefNum := vrn;
ioVolIndex := index;
oe := PBGetVInfo(@pb, false);
if oe = noErr then begin
vrn := ioVRefNum;
CrDate := ioVCrDate;
end;
end;
GetVolInfo := oe;
end;
{$S}
procedure OutlineDefault1 (dp: dialogPtr; item: integer);
var
kind: integer;
h: handle;
r: rect;
begin
GetDItem(dp, 1, kind, h, r);
PenSize(3, 3);
InsetRect(r, -4, -4);
FrameRoundRect(r, 16, 16);
end;
{$S Util}
procedure SetUpDefaultOutline (dp: dialogPtr; def_item, user_item: integer);
var
kind: integer;
h: handle;
r: rect;
begin
if def_item <> 1 then
DebugStr('MyUtilities:SetUpDefaultOutline:Cant handle anything except 1 yet');
GetDItem(dp, user_item, kind, h, r);
InsetRect(r, -10, -10);
SetDItem(dp, user_item, userItem, handle(@OutlineDefault1), r);
end;
{$S Util}
procedure FlashItem (dlg: dialogPtr; item: integer);
var
kind: integer;
h: handle;
r: rect;
f: longInt;
begin
GetDItem(dlg, item, kind, h, r);
HiliteControl(controlHandle(h), 1);
Delay(2, f);
HiliteControl(controlHandle(h), 0);
end;
{$S Util}
procedure PlotSICN (id: integer; index, v, h: integer);
var
sh: Handle;
bm: BitMap;
r: Rect;
gp: grafptr;
begin
sh := GetResource('SICN', id);
HLock(sh);
bm.baseAddr := Ptr(longInt(sh^) + (index - 1) * 32);
bm.rowBytes := 2;
SetRect(r, h, v, h + 16, v + 16);
bm.bounds := r;
GetPort(gp);
CopyBits(bm, gp^.portBits, r, r, srcCopy, nil);
HUnlock(sh);
end;
function HLockState (h: univ handle): signedByte;
begin
HLockState := HGetState(h);
HLock(h);
end;
{$Z+}
procedure SPrintS5V (var dst: str255; var src, s1, s2, s3, s4, s5: str255);
procedure DoSub (n: integer; var s: str255);
var
p: integer;
begin
p := Pos(concat('^', chr(n + 48)), dst);
if p > 0 then begin
Delete(dst, p, 2);
Insert(s, dst, p);
end;
end;
begin
dst := src;
DoSub(5, s5);
DoSub(4, s4);
DoSub(3, s3);
DoSub(2, s2);
DoSub(1, s1);
end;
{$Z-}
procedure SPrintS5 (var dst: str255; src, s1, s2, s3, s4, s5: str255);
begin
SPrintS5V(dst, src, s1, s2, s3, s4, s5);
end;
end.